package com.model.attributes;

import lombok.Data;

/**
 *  exception_table结构
 * @author seven
 */
@Data
public class Exceptions extends AttributesInfo{
    private int startPcLen=2;
    /**
     * 两项的值start_pc 和end_pc指示code异常处理程序处于活动状态的数组中的范围 。的值start_pc必须是code指令操作码数组的有效索引。
     * 的值end_pc必须是code指令操作码数组的有效索引，或者必须等于code_length， code数组。的值start_pc 必须小于的值end_pc。
     * 该 start_pc是包容性和end_pc独家; 也就是说，当程序计数器在间隔[ start_pc，end_pc）内时，异常处理程序必须处于活动状态。
     * 事实 end_pc 排他性是Java虚拟机设计中的一个历史性错误：如果某个方法的Java虚拟机代码正好是65535字节长，并且以一条1字节长的指令结尾，
     * 那么该指令将无法由异常处理程序保护。编译器编写者可以通过限制任何方法，实例初始化方法，
     */
    private int startPc;
    private int endPcLen=2;
    private int endPc;
    private int handlerPcLen=2;
    /**
     * 该handler_pc项目的值指示异常处理程序的开始。item的值必须是code数组的有效索引，并且必须是指令的操作码的索引。
     */
    private String handlerPc;
    private int catchTypeLen=2;
    /**
     * 用异常处理程序。
     * 验证者检查该类是否是 （§4.9.2）Throwable的子类。 Throwable
     * 如果该项的值catch_type为零，那么将为所有异常调用此异常处理程序。
     * 这用于实现finally （第3.13节）。
     */
    private String catchType;
}
